#include "pch.hpp"
#include "Component.hpp"
#include "Object.hpp"




Engine::Entity::Component::Component(bool requiresUpdate)
	: m_requiresUpdate(requiresUpdate)
	, m_entity(nullptr)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

Engine::Entity::Component::~Component()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




void Engine::Entity::Component::attached(Entity::Object* entity, const map& components)
{
	m_entity = entity;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Engine::Entity::Component::detached(Entity::Object* entity)
{
	verify(m_entity == entity);
	m_entity = nullptr;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




Engine::Entity::Object* Engine::Entity::Component::entity() const
{
	return m_entity;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

bool Engine::Entity::Component::isAttached() const
{
	return m_entity != nullptr;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




std::vector<Engine::Entity::Component::ID> Engine::Entity::Component::requiredComponents() const
{
	return std::vector<ID>();
}
///////////////////////////////////////////////////////////////////////////////////////////////////




bool Engine::Entity::Component::requiresUpdate() const
{
	return m_requiresUpdate;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Engine::Entity::Component::update()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Engine::Entity::Component::registerType(Script::System::ptr engine)
{
	engine->registerObjectType("Component", 0, asOBJ_REF);
	engine->registerObjectBehaviour("Component", asBEHAVE_ADDREF, "void f()", asMETHOD(Script::Object, AddRef), asCALL_THISCALL);
	engine->registerObjectBehaviour("Component", asBEHAVE_RELEASE, "void f()", asMETHOD(Script::Object, Release), asCALL_THISCALL);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
